package com.swanclouds.api.account;

import com.swanclouds.common.RestService;
import com.swanclouds.model.account.*;
import com.swanclouds.model.common.ActionResponse;
import com.swanclouds.model.common.redfish.CollectionResource;

import java.util.List;

/**
 * AccountService 资源操作
 *
 * @author 张立强
 */
public interface AccountService extends RestService {

    /**
     * 查询用户服务信息
     * @return AccountResource
     */
    AccountResource get();

    /**
     * 获取用户集合资源信息
     * @return CollectionResource
     */
    CollectionResource getAccounts();

    /**
     * 获取服务器指定用户信息
     * @param accountId 用户ID
     * @return Account
     */
    Account getAccount(String accountId);

    /**
     * 获取服务器用户信息列表
     * @return java.util.List&lt;Account&gt;
     */
    List<Account> getAccountList();

    /**
     * 创建用户
     * @param account 新用户信息
     * @return Account
     */
    Account create(CreateAccount account);

    /**
     * 删除用户
     * @param accountId 用户ID
     * @return ActionResponse
     */
    ActionResponse delete(String accountId);

    /**
     * 更新用户
     * @param account 用户信息
     * @param accountId 用户iID
     * @return Account
     */
    Account update(UpdateAccount account,String accountId);

    /**
     * 查询用户组集合信息
     * @return CollectionResource
     */
    CollectionResource getRoles();

    /**
     * 查询用户组信息
     * @param roleId 用户组ID
     * @return IBMCUserGroup
     */
    IBMCUserGroup getRole(String roleId);

    /**
     * 查询用户组信息列表
     * @return java.util.List&lt;IBMCRole&gt;
     */
    List<IBMCUserGroup> getRoleList();

    /**
     * 创建用户组信息
     * @param userGroup 用户组
     * @return IBMCUserGroup
     */
    IBMCUserGroup createRole(UserGroup userGroup);

    /**
     * 更新用户组信息
     * @param userGroup 用户组
     * @param roleId 用户组名字
     * @return IBMCUserGroup
     */
    IBMCUserGroup updateRole(UserGroup userGroup, String roleId);
    /**
     * 删除用户组信息
     * @param roleId 用户组名字
     * @return ActionResponse
     */
    ActionResponse deleteRole(String roleId);

    LdapService Ldap();

}
